package cn.biplam.common.bean.md;

import cn.biplam.common.bean.Bean;
import cn.biplam.common.client.DataFilter;
import cn.biplam.common.wrapper.ErrorMessage;
import cn.biplam.common.wrapper.UserInfo;

/**
 * 模型对象列操作类
 * @author WangSong 2009-10-28下午12:42:50
 * @version 1.0
 */
public abstract class MdTableCol extends Bean{
	
	/**
	 * 取列ID
	 * @return
	 * @throws ErrorMessage
	 */
	public abstract String getID() throws ErrorMessage;

	/**
	 * 取列所属的表ID
	 * @return
	 * @throws ErrorMessage
	 */
	public abstract String getTableID() throws ErrorMessage;

	/**
	 * 取列排序号
	 * @return
	 * @throws ErrorMessage
	 */
	public abstract String getOrderID() throws ErrorMessage;

	/**
	 * 取模型对象的表名称
	 * @return
	 * @throws ErrorMessage
	 */
	public abstract String getName() throws ErrorMessage;

	/**
	 * 取模型对象的表中文名称
	 * @return
	 * @throws ErrorMessage
	 */
	public abstract String getCnName() throws ErrorMessage;

	/**
	 * 取模型对象的表说明
	 * @return
	 * @throws ErrorMessage
	 */
	public abstract String getDesc() throws ErrorMessage;

	/**
	 * 取列的数据类型
	 * @return
	 * @throws ErrorMessage
	 */
	public abstract String getDataType() throws ErrorMessage;

	/**
	 * 取列的数据精度
	 * @return
	 * @throws ErrorMessage
	 */
	public abstract String getDataPrecision() throws ErrorMessage;

	/**
	 * 取列的数据范围
	 * @return
	 * @throws ErrorMessage
	 */
	public abstract String getDataScale() throws ErrorMessage;

	/**
	 * 获取列数据类型描述 格式：数据类型（长度,精度）
	 * @return
	 * @throws ErrorMessage
	 */
	public abstract String getDataTypeDesc() throws ErrorMessage;

	/**
	 * 获取字段名称描述 格式：物理名称(逻辑名称)
	 * @return
	 * @throws ErrorMessage 
	 */
	public abstract String getNameDetailDesc() throws ErrorMessage;

	/**
	 * 取列的数据长度
	 * @return
	 * @throws ErrorMessage
	 */
	public abstract String getDataLength() throws ErrorMessage;

	/**
	 * 取列是否是主键
	 * @return
	 * @throws ErrorMessage
	 */
	public abstract String getIsPk() throws ErrorMessage;

	/**
	 * 取列是否是主键
	 * @return
	 * @throws ErrorMessage
	 */
	public abstract String getsIsPk() throws ErrorMessage;
	
	/**
	 * 取列是否是主键
	 * @return
	 * @throws ErrorMessage
	 */
	public abstract boolean getbIsPk() throws ErrorMessage;
	
	/**
	 * 取列是否是外键
	 * @return
	 * @throws ErrorMessage
	 */
	public abstract String getIsFk() throws ErrorMessage;

	/**
	 * 取列是否是外键
	 * @return
	 * @throws ErrorMessage
	 */
	public abstract String getsIsFk() throws ErrorMessage;
	
	/**
	 * 取列是否是外键
	 * @return
	 * @throws ErrorMessage
	 */
	public abstract boolean getbIsFk() throws ErrorMessage;

	/**
	 * 列是否可以为空
	 * @return
	 * @throws ErrorMessage
	 */
	public abstract String getNullAble() throws ErrorMessage;

	/**
	 * 列是否可以为空的字符描述，  Y：允许空;N:不允许空
	 * @return
	 * @throws ErrorMessage
	 */
	public abstract String getsNullAble() throws ErrorMessage;

	/**
	 * 获取复合主键必须包含
	 * @return
	 * @throws ErrorMessage 
	 */
	public abstract String getMultiPkInclude() throws ErrorMessage;

	/**
	 * 字段状态
	 * @return 获取字段是否有效
	 * @throws ErrorMessage
	 */
	public abstract boolean getColIsValid() throws ErrorMessage;

	/**
	 * 更新记录集
	 * @param filter 过滤器
	 * @throws ErrorMessage
	 */
	public abstract void update(DataFilter filter) throws ErrorMessage;

	/**
	 * 插入记录集
	 * @param filter 过滤器
	 * @throws ErrorMessage
	 */
	public abstract String insert(DataFilter filter) throws ErrorMessage;

	/**
	 * 插入记录集
	 * @param filter 过滤器
	 * @throws ErrorMessage
	 */
	public abstract void delte() throws ErrorMessage;

	/**
	 * 判断对象信息是否存在
	 * @return
	 */
	public abstract boolean exist();
	
	/**
	 * 根据列id和模型对象类型,新建实例
	 * @param mUser     用户信息
	 * @param colId     字段ID
	 * @param modelType 模型类型
	 * @return 实例
	 * @throws ErrorMessage
	 */
	public static MdTableCol getNewInstance(UserInfo mUser,String colId,String modelType) throws ErrorMessage{
		return (MdTableCol)get(MdTableCol.class.getSimpleName(), mUser, colId, modelType);
	}
	
	/**
	 * 根据列id和模型对象类型,新建实例
	 * @param userId 用户ID
	 * @param colId     字段ID
	 * @param modelType 模型类型
	 * @return 实例
	 * @throws ErrorMessage
	 */
	public static MdTableCol getNewInstance(String userId,String colId,String modelType) throws ErrorMessage{
		return (MdTableCol)get(MdTableCol.class.getSimpleName(), userId, colId, modelType);
	}
	
	/**
	 * 根据表id，列名和模型对象类型,新建实例
	 * @param mUser     用户信息
	 * @param tableId   表ID
	 * @param colName   字段名称
	 * @param modelType 模型类型
	 * @return 实例
	 * @throws ErrorMessage
	 */
	public static MdTableCol getNewInstance(UserInfo mUser,String tableId,String colName,String modelType) throws ErrorMessage{
		return (MdTableCol)get(MdTableCol.class.getSimpleName(), mUser, tableId, colName, modelType);
	}
	
	/**表列ID 字段名 */
	public abstract String getOCID();
	
	/** 表id 字段名 */
	public abstract String getOID();
	
	/** 表列名称 字段名 */
	public abstract String getTABLE_COL_NAME();
	
	/** 表列中文名 字段名 */
	public abstract String getTABLE_COL_CNAME();
	
	/** 表列说明 字段名 */
	public abstract String getTABLE_COL_DESC();
	
	/** 表列数据类型 字段名 */
	public abstract String getDATA_TYPE();
	
	/** 表列数据进度 字段名 */
	public abstract String getDATA_PRECISION();
	
	/** 表列小数范围 字段名 */
	public abstract String getDATA_SCALE();
	
	/** 表列是否可以为空 字段名 */
	public abstract String getNULLABLE();
	
	/** 表列是否是主键 字段名 */
	public abstract String getIS_PK();
	
	/** 表列字段长度 字段名 */
	public abstract String getDATA_LENGTH();
	
	/** 表列是否是外键 字段名 */
	public abstract String getIS_FK();
	
	/** 表复合主键包含 */
	public abstract String getMULTI_PK_INCLUDE();
	
	/** 排序id*/
	public abstract String getORID();
	
	/** 字段状态 */
	public abstract String getCOL_STATE();

}